"""
@Author  : 康帅
@Time    : 2021/4/14 17:31
@Function: 线程间通讯案例:生产包子与吃包子
"""

import threading
import time
import queue

"""
模拟包子店卖包子
厨房每一秒钟制造一个包子
顾客每三秒吃掉一个包子
厨房一次性最多存放100个包子
"""

# 厨房最多一次存放100个包子
q = queue.Queue(maxsize=100)


def produce(q):
    """ 生产包子 """
    for i in range(10000):
        # 生产出包子，表明包子的id号
        q.put(f'第{str(i)}个包子')
        # 要一秒才能造出一个包子
        time.sleep(1)


def consume(q):
    # 只要包子店里有包子
    while not q.empty():
        # q.qsize()是获取队列中剩余的数量
        print(f'包子店的包子剩余量{str(q.qsize())}')
        # q.get()是一个堵塞的，会等待直到获取到数据
        print('小桃红吃了:'+str(q.get()))
        print('------------')
        time.sleep(3)


if __name__ == '__main__':
    t1 = threading.Thread(target=produce, args=(q,))
    t2 = threading.Thread(target=consume, args=(q,))
    t1.start()
    t2.start()
